package com.ruoyi.system.service;

import java.util.List;
import java.util.Map;

import com.ruoyi.system.domain.AlignBase;
import com.ruoyi.system.domain.OkrAlignInfo;
import com.ruoyi.system.domain.resultMapper.OAlignResult;
import com.ruoyi.system.domain.resultMapper.OAlignedResult;
import org.apache.ibatis.annotations.Param;

/**
 * OKR对齐关系Service接口
 * 
 * @author xiaoshuai2233@sina.com
 * @date 2020-06-04
 */
public interface IOkrAlignInfoService 
{
    /**
     * 查询OKR对齐关系
     * 
     * @param id OKR对齐关系ID
     * @return OKR对齐关系
     */
    public OkrAlignInfo selectOkrAlignInfoById(Long id);

    /**
     * 查询OKR对齐关系列表
     * 
     * @param okrAlignInfo OKR对齐关系
     * @return OKR对齐关系集合
     */
    public List<OkrAlignInfo> selectOkrAlignInfoList(OkrAlignInfo okrAlignInfo);


//    /**
//     * 查询OKR对齐状态
//     *
//     * @param okrIds  OKR清单集合
//     * @return OKR对齐关系集合
//     */
//    public List<OkrAlignInfo> selectOkrAlignInfoListForIds(List<String> okrIds);
//
//
//    public Map<String, String> getAlignMap(List<OkrAlignInfo> okrAlignInfos);


    int isAligned(@Param("id")Long id, @Param("userId")Long userId);

    /**
     * 新增OKR对齐关系
     * 
     * @param okrAlignInfo OKR对齐关系
     * @return 结果
     */
    public int insertOkrAlignInfo(OkrAlignInfo okrAlignInfo);

    /**
     * 修改OKR对齐关系
     * 
     * @param okrAlignInfo OKR对齐关系
     * @return 结果
     */
    public int updateOkrAlignInfo(OkrAlignInfo okrAlignInfo);

    /**
     * 批量删除OKR对齐关系
     * 
     * @param ids 需要删除的数据ID
     * @return 结果
     */
    public int deleteOkrAlignInfoByIds(String ids);

    /**
     * 删除OKR对齐关系信息
     * 
     * @param id OKR对齐关系ID
     * @return 结果
     */
    public int deleteOkrAlignInfoByOkrId(String id);


    public int deleteOkrAlignInfoById(Long id);


    /**
     * 查询所有可以对齐的O
     *  对普通角色来说,自己以外的所有同部门的,且没有被对齐过的O
     *  对管理角色来说,其他部门的Leader的,且没有被对齐过的O
     * @param alignBase 准备进行对齐的O
     * @return 结果
     */
    public List<OAlignResult> queryAllAlignO(AlignBase alignBase);


    /**
     * 查找所有已经跟当前O选择对齐的O
     *
     * @param alignBase 准备进行对齐操作的O
     * @return 结果
     */
    public List<OAlignedResult> queryAlignedO(AlignBase alignBase);


    /**
     * 根据对齐后的两个O查找主键
     *
     * @param okrAlignInfo 对齐过的两个O
     * @return 结果
     */
    public Long queryByAlignId(OkrAlignInfo okrAlignInfo);

    /**
     * 查询反向对齐是否存在
     *
     * @param parentId
     * @param okrId
     */
    public int queryReverseAlign(Long parentId, Long okrId);
}
